package com.juzipi.demo.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.juzipi.common.utils.DateUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.Map;

public class JwtUtil {


    public static long EXPIRATION = 1000;//以秒未单位吧
    public static String SALT = "dajiawanshanghaoa";//密钥


    public static String getToken(Long expirationSeconds, Map<String,String> claims){
        JWTCreator.Builder builder = JWT.create();
//        builder.withHeader()//头部就用默认的了 默认是这个算法：HMAC256
        //遍历map
        //放入传来的 key 和 value，作为 payload 荷载
        claims.forEach(builder::withClaim);

        String token = builder
                .withExpiresAt(new Date(System.currentTimeMillis() + expirationSeconds*EXPIRATION))//指定令牌过期时间，传入的时间是以秒未单位
                .sign(Algorithm.HMAC256(SALT));//这里要和头部加密的方法一致
        return token;
    }


    public static boolean verify(String token) {
            if (StringUtils.isNotBlank(token)){
                //验证通过直接返回
                DecodedJWT verify = JWT.require(Algorithm.HMAC256(SALT)).build().verify(token);
                System.out.println("通过");
                return true;
            }
        return false;
    }


    public static boolean isExpiration(String expirationTime){

        //通过redis中的失效时间判断
        String currentTime = DateUtils.getTime();
        //当前时间比过期时间小
        return true;
//        return DateUtils.get(currentTime, expirationTime);
    }



    public static String getClaim(String token){
        if (StringUtils.isNotBlank(token)){
            DecodedJWT decode = JWT.decode(token);
            return decode.getClaim("username").asString();
        }
        return null;
    }
}
